1、删除重复的节点
思想：三指针法
/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};
*/
class Solution {
public:
    ListNode* deleteDuplication(ListNode* pHead) {
        if(pHead==nullptr)
            return nullptr;
        ListNode* cur=pHead->next;
        ListNode* prev=pHead;
        ListNode* pprev=pHead;
        while(cur)
        {
            if(prev->val==cur->val)
            {
                if(prev==pHead)
                {
                    while(cur&&prev->val==cur->val)
                        cur=cur->next;
                    pHead=prev=cur;
                    if(cur)
                        cur=cur->next;
                }
                else
                {
                    while(cur&&prev->val==cur->val)
                        cur=cur->next;
                    pprev->next=cur;
                    prev=pprev;
                }
            }
            else
            {
                pprev=prev;
                prev=cur;
                cur=cur->next;
            }
        }
        return pHead;
    }
};